package p2.code;

public class SynchronizedStudy {

    private static Integer num1 = 0;
    private static Integer num2 = 0;

    /**
     * 内置锁修饰代码块
     * @param num
     */
    public void add(int num) {
        synchronized(this) {
            num1 += num;
            num2 -= num;
        }
    }

    /**
     * 内置锁修饰普通方法锁住对象方法
     * @param num
     */
    public synchronized void add2(int num){
        num1 += num;
        num2 -= num;
    }

    /**
     * 内置锁修饰方法锁住静态方法
     * @param num
     */
    public synchronized static void add3(int num){
        num1 += num;
        num2 -= num;
    }

    /**
     * 内置锁所住类
     * @param num
     */
    public static void add4(int num){
        synchronized (SynchronizedStudy.class){
            num1 += num;
            num2 -= num;
        }
    }

    public static void main(String[] args) throws InterruptedException {
        SynchronizedStudy study = new SynchronizedStudy();
        for(int i=0;i<500;i++) {
            new Thread(()->{
                study.add(1);
                study.add2(1);
            }).start();
        }
        Thread.sleep(5000);
        System.out.println("num1: "+num1);
        System.out.println("num2: "+num2);
    }

}
